package com.ruoyi.warn.mapper;

import com.ruoyi.common.core.domain.vo.UserInfoVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import com.ruoyi.user.domain.UserInfo;
import com.ruoyi.user.mapper.UserInfoMapper;
import com.ruoyi.warn.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zhangxiaohao
 * @comment 智能预警Mapper
 * @date 2023/2/14
 */
@Mapper
public interface WarnMapper extends BaseMapperPlus<UserInfoMapper, UserInfo, UserInfoVo> {
    /**
     * 风险人员统计
     */
    FxryNumsVo fxryNums();

    /**
     * 风险人员详情列表
     */
    List<FxryDetailVo> fxryDetails();

    /**
     * 社戒社康 - 某月人数
     *
     * @param date 日期
     * @return 人数
     */
    int sjskXzrsByMonth(String date);

    /**
     * 社戒社康 - 某月人员详情列表
     *
     * @param date 日期
     * @return 人员列表
     */
    List<RyDetailVo> sjskXzrsDetailByMonth(String date);

    /**
     * 社戒社康 - 统计 - 月新增人数
     */
    List<DayStatisticsVo> sjskbyxzrsStatistics(String date);

    /**
     * 违反协议 - 某月新增人数
     *
     * @param date 日期
     * @return 新增人数
     */
    int wfxyxzrsByMonth(String date);

    /**
     * 严重违反协议 - 统计 - 本月新增人数
     */
    List<DayStatisticsVo> yzwfxybyxzrsStatisticsByMonth(String date);

    /**
     * 违反协议 - 本月新增人员详情列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> wfxyxzrsDetailByMonth(String date);

    /**
     * 超期未报道人数
     *
     * @param date 日期
     * @return 人数
     */
    Integer cqwbdrsNumsByMonth(String date);

    /**
     * 超期未报道人数 - 统计（日）
     *
     * @param date 日期
     * @return 统计结构
     */
    List<DayStatisticsVo> cqwbdrsStatisticsByMonth(String date);

    /**
     * 超期未报道人员 - 详情列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> cqwbdrsDetailByDay(String date);

    /**
     * 强戒出所预警 - 统计（日）
     *
     * @param date 日期
     * @return 统计结构
     */
    List<DayStatisticsVo> qjcsryStatisticsByMonth(String date);

    /**
     * 超期未报道人员 - 人员列表
     *
     * @param date 日期
     * @return 人员详情列表
     */
    List<RyDetailVo> qjcsryDetailByDay(String date);

    /**
     * 吊销驾照人数统计
     */
    List<JszsfdxStatisticsVo> jszsfdxStatistics();

    /**
     * 未吊销驾照人员 - 详情列表
     */
    List<RyDetailVo> jszsfdxWdxryDetail();

    /**
     * 签到预警人数统计
     */
    List<QdyjStatisticsVo> qdyjStatistics();

    /**
     * 签到预警人员 - 详情列表
     */
    List<RyDetailVo> qdyjDetail();

    /**
     * 提前15天预警未尿检人数
     */
    Integer njyjNum();

    /**
     * 尿检预警人员详情
     */
    List<RyDetailVo> njyjryxq();

    /**
     * 超期未尿检人员详情
     */
    boolean cqwnjryxq(@Param("cycleRanges") List<String> cycleRanges);

    /**
     * 本周期已尿检人员详情
     */
    List<RyDetailVo> bzqynjryxq();

    /**
     * 家访预警人数统计
     */
    List<JfyjStatisticsVo> jfyjStatistics();

    /**
     * 签到预警人员 - 详情列表
     */
    List<RyDetailVo> jfyjDetail();

    /**
     * 毛发检测预警人数统计
     */
    Integer mftjNum();

    /**
     * 毛发检测预警人员 - 详情列表
     */
    List<RyDetailVo> mftjDetail();

    /**
     * 帮扶预警 - 人数统计
     */
    BfyjStatisticsVo bfyjStatistics();

    /**
     * 帮扶预警 - 详情列表
     */
    List<RyDetailVo> bfyjDetail();

    /**
     * 房屋踏查预警 - 超期数量统计
     */
    Integer fwtcyjNum();

    /**
     * 房屋踏查预警 - 踏查信息
     */
    List<FwTcDetailVo> fwtcyjDetail(@Param("type") String type, @Param("mode") String mode);

    /**
     * 工作日志 - 各类型数量统计
     *
     * @param memberId 工作人员id
     */
    GzrzNumsVo gzrzNums(Long memberId);

    /**
     * 工作日志 - 超期未报道列表
     *
     * @param memberId 工作人员id
     */
    List<RyDetailVo> gzrzCqwbdrList(@Param("memberId") Long memberId);

    /**
     * 工作日志 - 外出人员列表
     * @param memberId 工作人员id
     */
    List<RyDetailVo> gzrzWcryList(Long memberId);

    /**
     * 工作日志 - 普通违反人员列表
     * @param memberId 会员id
     */
    List<RyDetailVo> gzrzByptwfxyList(Long memberId);

    /**
     * 工作日志 - 严重违反人员列表
     * @param memberId 会员id
     */
    List<RyDetailVo> gzrzByYzwfxyList(Long memberId);
}
